#ifndef OEditGuidesModifier_H__
#define OEditGuidesModifier_H__

enum
{
	// Dynamic attributes defined on enum class PlugId
	edg_PLUGS = 1000,
	
	//////////////////////////////////////////////////////////////////////////
	// Object attributes -- DO NOT CHANGE, attribute keys on saved projects
	edg_START = 2000,
	
	// Editor
	edg_InputGuidesDeltaAttribute,
	edg_OutputGuidesDeltaAttribute,
	edg_CachedGuidesAttribute,

	// Attributes
	
	edg_EditModeAttribute = 2100,
	edg_ApplyAmountAttribute,
	edg_SelectedStrandsCount,
	edg_SelectStrandsRadius,
	edg_TransformScale,
	edg_SkipHairUpdateWhileDragging,
	edg_ApplyRampAttribute,
	edg_ApplyMultiplierAttribute,
	edg_ApplyChannelAttribute,
	edg_Apply_Group,

	edg_GuideOptions_Group = 2200,
	edg_ShowVertexTicksAttribute,
	edg_ShowColorGuidesAttribute,
	edg_IgnoreBackfacingStrandSelectionAttribute,
	edg_GuidesWidthAttribute,
	edg_HideGuidesAttribute,
	
	edg_GuideOperations_Group = 2300,
	edg_PushAwayFromMeshDistance,
	edg_PushAwayFromMeshSelectedOnly,
	edg_PushAwayFromMeshAuto,
	
	edg_Root_Group = 2400,
	edg_ModifyRootsAttribute,
	edg_PlantedGuideAdoptGuide,
	edg_PlantedGuideLength,
	edg_PlantedGuidePointCount,

	edg_Guides_Group = 2500,
	edg_ControlPointPositionAttribute,
	edg_ControlPointInfluenceAttribute,
	edg_UseStrandIkAttribute,
	edg_IkIterationsAttribute,
	edg_PreserveStrandLengthAttribute,
	// #4009
	edg_OptimizeStrandGeometryAttribute_CP,
	edg_ResampleStrandsAttribute_CP,
	edg_UseElasticBrushAttribute_CP,
	edg_ElasticPoissonRatioAttribute_CP,
	edg_ElasticUseRK4IntegrationAttribute_CP,
	edg_ElasticUseMultiscaleAttribute_CP,
	edg_ElasticUse2dFieldAttribute_CP,
	edg_ElasticPinchAttribute_CP,
	edg_ElasticIsCenterMovingAttribute_CP,
	edg_ElasticReverseSignAttribute_CP,
	edg_ElasticDepth3dAttribute_CP,
	edg_ElasticUseAffineAttribute_CP,

	// Brushes
	
	edg_Brush_Group = 2600,
	edg_BrushAttribute,
	edg_BrushShapeAttribute,
	edg_BrushMaxLimiterAttribute,
	edg_BrushMinLimiterAttribute,
	edg_BrushSizeAttribute,
	edg_BrushStrengthAttribute,
	edg_UseTabletPressureAttribute,
	edg_AffectSelectedOnlyAttribute,
	edg_AffectByRootsOnlyAttribute,
	edg_RespectVertexWeightsAttribute,
	edg_BrushStrengthAttenuationRampAttribute,
	edg_StrandStrengthAttenuationRampAttribute,
	edg_UseSurfaceBrushAttribute,
	edg_BrushMirrorAxisAttribute,
	edg_MirrorBrushInWorldSpaceAttribute,
	// #4009
	edg_OptimizeStrandGeometryAttribute,
	edg_ResampleStrandsAttribute,
	edg_UseElasticBrushAttribute,
	edg_ElasticPoissonRatioAttribute,
	edg_ElasticUseRK4IntegrationAttribute,
	edg_ElasticUseMultiscaleAttribute,
	edg_ElasticUse2dFieldAttribute,
	edg_ElasticPinchAttribute,
	edg_ElasticIsCenterMovingAttribute,
	edg_ElasticReverseSignAttribute,
	edg_ElasticDepth3dAttribute,
	edg_ElasticUseAffineAttribute,
	edg_UserBrushAttribute,
	edg_BrushAttenuationRamps_Group,

	// Strand groups:
	
	edg_StrandGroups_Group = 2700,
	edg_UseStrandGroupsAttribute,
	edg_CurrentStrandGroupIndexAttribute,
	edg_SelectByGroupAttribute,
	edg_SelectByOrderLabel,
	
	// Channels
	
	edg_Channels_Group = 2800,
	edg_CurrentChannelIdAttribute,
	edg_CurrentChannelValueAttribute,
	
	
	// Arrays
	
	edg_BrushShape_Array = 2900,
	edg_BrushSize_Array,
	edg_BrushStrength_Array,
	edg_AffectSelectedOnly_Array,
	edg_AffectByRootsOnly_Array,
	edg_RespectVertexWeights_Array,
	edg_UseSurfaceBrush_Array,
	edg_BrushStrengthAttenuationRamp_Array,
	edg_StrandStrengthAttenuationRamp_Array,

	
	//-------------------------------------
	// Buttons
	// Events, Can be moved aroiund
	
	edg_Button_EditMode_None = 5000,
	edg_Button_EditMode_Root,
	edg_Button_EditMode_Strand,
	edg_Button_EditMode_Brush,
	
	edg_Button_SelectStrandsTool,
	edg_Button_SelectStrandsRectTool,
	edg_Button_SelectStrandsAll,
	edg_Button_SelectStrandsNone,
	edg_Button_MoveStrands,
	edg_Button_ScaleStrands,
	edg_Button_RotateStrands,
	edg_Button_DeleteStrands,
	
	edg_Button_GuideOptions_Hide,
	edg_Button_GuideOptions_Unhide,
	edg_Button_GuideOptions_Freeze,
	edg_Button_GuideOptions_Unfreeze,
	edg_Button_GuideOptions_Delete,
	edg_Button_GuideOptions_PushAway,
	edg_Button_GuideOptions_AdoptFromStackTop,
	
	edg_Button_Roots_PlantGuide,
	
	edg_Button_BrushShape_Circle,
	edg_Button_BrushShape_Rectangle,
	edg_Button_BrushShape_Line,
	
	edg_Button_BrushType_Select,
	edg_Button_BrushType_Comb,
	edg_Button_BrushType_Rotate,
	edg_Button_BrushType_Scale,
	edg_Button_BrushType_Cut,
	edg_Button_BrushType_GrowShrink,
	edg_Button_BrushType_Paint,
	edg_Button_BrushType_Grab,
	edg_Button_BrushType_Smooth,
	edg_Button_BrushType_Revert,
	edg_Button_BrushType_Pull,
	edg_Button_BrushType_User,
	
	edg_Button_UserBrushRefresh,
	
	edg_Button_StrandGroups_Assign,
	edg_Button_StrandGroups_AssignUnique,
	edg_Button_StrandGroups_Select,
	edg_Button_StrandGroups_SelectPrevious,
	edg_Button_StrandGroups_SelectNext,
	
	edg_Button_Channels_Label,
	edg_Button_Channels_Add,
	edg_Button_Channels_Delete,
	edg_Button_Channels_Rename,
	edg_Button_Channels_SetValue,
	edg_Button_Channels_DeselectAll,
	edg_Button_MultiResolutionToggle,
	
	//////////////////////////////////////////////////////////////////////////
	
	edg_END
};

// Menu Options

enum
{
	edg_EditMode_None,
	edg_EditMode_Root,
	edg_EditMode_Strand,
	edg_EditMode_Brush,
};

enum // Brush::Parameters::OrnatrixEditGuidesBrushShape
{
	edg_BrushShape_Circle,
	edg_BrushShape_Rectangle,
	edg_BrushShape_Line,
	edg_BrushShape_Messy,
	//
	edg_BrushShape_Count,
};

enum // Brush::Parameters::OrnatrixEditGuidesBrushType
{
	edg_BrushType_Invalid = -1,
	edg_BrushType_Select,
	edg_BrushType_Comb,
	edg_BrushType_Rotate,
	edg_BrushType_Scale,
	edg_BrushType_Cut,
	edg_BrushType_GrowShrink,
	edg_BrushType_Paint,
	edg_BrushType_Grab,
	edg_BrushType_Smooth,
	edg_BrushType_Revert,
	edg_BrushType_Pull,
	edg_BrushType_User,
	//
	edg_BrushType_Count,
};

enum // Brush::Parameters::Axis
{
	edg_BrushMirrorAxis_X,
	edg_BrushMirrorAxis_Y,
	edg_BrushMirrorAxis_Z,
	edg_BrushMirrorAxis_Count,
};

#endif
